import os
import sys
import subprocess
import shutil

def check_pyinstaller():
    """检查是否已安装PyInstaller，如果没有则安装"""
    try:
        import PyInstaller
        print("PyInstaller 已安装")
        return True
    except ImportError:
        print("正在安装 PyInstaller...")
        try:
            subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
            print("PyInstaller 安装成功")
            return True
        except subprocess.CalledProcessError:
            print("安装 PyInstaller 失败")
            return False

def build_exe():
    """使用PyInstaller构建exe文件"""
    print("开始构建exe文件...")
    
    # 构建命令
    cmd = [
        "pyinstaller",
        "--name=数据库管理器",
        "--windowed",  # 隐藏控制台
        "--onefile",   # 生成单个exe文件
        "--clean",     # 清理临时文件
        "--icon=NONE", # 不使用图标
        "db_manager.py"
    ]
    
    try:
        subprocess.check_call(cmd)
        print("exe文件构建成功")
        
        # 检查是否成功创建了exe文件
        exe_path = os.path.join("dist", "数据库管理器.exe")
        if os.path.exists(exe_path):
            print(f"可执行文件已创建: {os.path.abspath(exe_path)}")
            
            # 复制到当前目录
            shutil.copy(exe_path, "数据库管理器.exe")
            print(f"可执行文件已复制到: {os.path.abspath('数据库管理器.exe')}")
            
            # 清理临时文件
            if os.path.exists("build"):
                shutil.rmtree("build")
            if os.path.exists("数据库管理器.spec"):
                os.remove("数据库管理器.spec")
            print("临时文件已清理")
            
            return True
        else:
            print("未找到生成的exe文件")
            return False
    except subprocess.CalledProcessError as e:
        print(f"构建exe文件失败: {e}")
        return False

if __name__ == "__main__":
    if check_pyinstaller():
        build_exe()
    else:
        print("请先安装PyInstaller: pip install pyinstaller")